About scheduling [system call]

우선순위 기반 스케쥴러(Priority-Based Scheduler)-스케줄링 알고리즘 중 1
정적우선순위
    프로세스마다 우선순위를 미리 지정
동적 우선순위
    스케쥴러가 상황에 따라 우선순위를 동적으로 변경
POSIX- 시스템콜 정의 — 리눅스 정의
nice()-우선순위 변경
프로세스 중 사실상 root가 소유한 프로세스만, 우선순위를 높일 수 있다.
    다른 프로세스는 우선순위를 낮출 수만 있다.
    스케쥴링 방식에 따라 우선순위가 적용될 수도 있고, 안될 수도 있음
#include <unistd.h>
int nice(int inc);
getprioritiy() & setpriority()
우선순위 출력 및 우선순위를 매겨줌
#include <sys/resource.h>
int getpriority(int which, id_t who);
int setpriority(int which, id_t who, int value);
which: 프로세스(PRIO_PROCESS), 프로세스 그룹(PRIO_PGRP), 사용자(PRIO_USER) 별로 우선순위를 가져온다.
who: PID(0일경우 현재 프로세스)
value: 우선순위
priority.c-root owner로 실행
#include <sys/resource.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
int main(void){
int which=PRIO_PROCESS;
id_t pid;
int ret;
pid=getpid();
ret=getpriority(which, 0);
printf("PID=%d, PRIORITY=%d\n", pid, ret);
ret=nice(10);
ret=getpriority(which, 0);
printf("PID=%d, PRIORITY=%d\n", pid, ret);
ret=setpriority(which, 0, 5);
ret=getpriority(which, 0);
printf("PID=%d, PRIORITY=%d\n", pid, ret);
return 0;
}

celina@ubuntuserver:~/celina/test$ ./priority

PID=3030, PRIORITY=0

PID=3030, PRIORITY=10

PID=3030, PRIORITY=10

celina@ubuntuserver:~/celina/test$ sudo su

[sudo] password for celina: 

root@ubuntuserver:/home/celina/celina/test# ./priority

PID=3048, PRIORITY=0

PID=3048, PRIORITY=10

PID=3048, PRIORITY=5

우선순위를 높이는 작업은 root 권한이 있을 때만 가능하다.